/****************************************************************************
 h6280.h
 Function protoypes for simulated execution routines
 ****************************************************************************/

#ifndef H6280_H_
#define H6280_H_

#include "cleantyp.h"

/********************************************/
/* function parameters:                     */
/* --------------------                     */
/* - address (16-bit unsigned),             */
/* - pointer to buffer @ program counter    */
/********************************************/

extern void exe_instruct(void);
extern void exe_go(void);

extern void adc_abs(void);
extern void adc_absx(void);
extern void adc_absy(void);
extern void adc_imm(void);
extern void adc_zp(void);
extern void adc_zpind(void);
extern void adc_zpindx(void);
extern void adc_zpindy(void);
extern void adc_zpx(void);
extern void and_abs(void);
extern void and_absx(void);
extern void and_absy(void);
extern void and_imm(void);
extern void and_zp(void);
extern void and_zpind(void);
extern void and_zpindx(void);
extern void and_zpindy(void);
extern void and_zpx(void);
extern void asl_a(void);
extern void asl_abs(void);
extern void asl_absx(void);
extern void asl_zp(void);
extern void asl_zpx(void);
extern void bbr0(void);
extern void bbr1(void);
extern void bbr2(void);
extern void bbr3(void);
extern void bbr4(void);
extern void bbr5(void);
extern void bbr6(void);
extern void bbr7(void);
extern void bbs0(void);
extern void bbs1(void);
extern void bbs2(void);
extern void bbs3(void);
extern void bbs4(void);
extern void bbs5(void);
extern void bbs6(void);
extern void bbs7(void);
extern void bcc(void);
extern void bcs(void);
extern void beq(void);
extern void bit_abs(void);
extern void bit_absx(void);
extern void bit_imm(void);
extern void bit_zp(void);
extern void bit_zpx(void);
extern void bmi(void);
extern void bne(void);
extern void bpl(void);
extern void bra(void);
extern void brek(void);
extern void bsr(void);
extern void bvc(void);
extern void bvs(void);
extern void cla(void);
extern void clc(void);
extern void cld(void);
extern void cli(void);
extern void clv(void);
extern void clx(void);
extern void cly(void);
extern void cmp_abs(void);
extern void cmp_absx(void);
extern void cmp_absy(void);
extern void cmp_imm(void);
extern void cmp_zp(void);
extern void cmp_zpind(void);
extern void cmp_zpindx(void);
extern void cmp_zpindy(void);
extern void cmp_zpx(void);
extern void cpx_abs(void);
extern void cpx_imm(void);
extern void cpx_zp(void);
extern void cpy_abs(void);
extern void cpy_imm(void);
extern void cpy_zp(void);
extern void dec_a(void);
extern void dec_abs(void);
extern void dec_absx(void);
extern void dec_zp(void);
extern void dec_zpx(void);
extern void dex(void);
extern void dey(void);
extern void eor_abs(void);
extern void eor_absx(void);
extern void eor_absy(void);
extern void eor_imm(void);
extern void eor_zp(void);
extern void eor_zpind(void);
extern void eor_zpindx(void);
extern void eor_zpindy(void);
extern void eor_zpx(void);
extern void halt(void);
extern void inc_a(void);
extern void inc_abs(void);
extern void inc_absx(void);
extern void inc_zp(void);
extern void inc_zpx(void);
extern void inx(void);
extern void iny(void);
extern void jmp(void);
extern void jmp_absind(void);
extern void jmp_absindx(void);
extern void jsr(void);
extern void lda_abs(void);
extern void lda_absx(void);
extern void lda_absy(void);
extern void lda_imm(void);
extern void lda_zp(void);
extern void lda_zpind(void);
extern void lda_zpindx(void);
extern void lda_zpindy(void);
extern void lda_zpx(void);
extern void ldx_abs(void);
extern void ldx_absy(void);
extern void ldx_imm(void);
extern void ldx_zp(void);
extern void ldx_zpy(void);
extern void ldy_abs(void);
extern void ldy_absx(void);
extern void ldy_imm(void);
extern void ldy_zp(void);
extern void ldy_zpx(void);
extern void lsr_a(void);
extern void lsr_abs(void);
extern void lsr_absx(void);
extern void lsr_zp(void);
extern void lsr_zpx(void);
extern void nop(void);
extern void ora_abs(void);
extern void ora_absx(void);
extern void ora_absy(void);
extern void ora_imm(void);
extern void ora_zp(void);
extern void ora_zpind(void);
extern void ora_zpindx(void);
extern void ora_zpindy(void);
extern void ora_zpx(void);
extern void pha(void);
extern void php(void);
extern void phx(void);
extern void phy(void);
extern void pla(void);
extern void plp(void);
extern void plx(void);
extern void ply(void);
extern void rmb0(void);
extern void rmb1(void);
extern void rmb2(void);
extern void rmb3(void);
extern void rmb4(void);
extern void rmb5(void);
extern void rmb6(void);
extern void rmb7(void);
extern void rol_a(void);
extern void rol_abs(void);
extern void rol_absx(void);
extern void rol_zp(void);
extern void rol_zpx(void);
extern void ror_a(void);
extern void ror_abs(void);
extern void ror_absx(void);
extern void ror_zp(void);
extern void ror_zpx(void);
extern void rti(void);
extern void rts(void);
extern void sax(void);
extern void say(void);
extern void sbc_abs(void);
extern void sbc_absx(void);
extern void sbc_absy(void);
extern void sbc_imm(void);
extern void sbc_zp(void);
extern void sbc_zpind(void);
extern void sbc_zpindx(void);
extern void sbc_zpindy(void);
extern void sbc_zpx(void);
extern void sec(void);
extern void sed(void);
extern void sei(void);
extern void set(void);
extern void smb0(void);
extern void smb1(void);
extern void smb2(void);
extern void smb3(void);
extern void smb4(void);
extern void smb5(void);
extern void smb6(void);
extern void smb7(void);
extern void st0(void);
extern void st1(void);
extern void st2(void);
extern void sta_abs(void);
extern void sta_absx(void);
extern void sta_absy(void);
extern void sta_zp(void);
extern void sta_zpind(void);
extern void sta_zpindx(void);
extern void sta_zpindy(void);
extern void sta_zpx(void);
extern void stx_abs(void);
extern void stx_zp(void);
extern void stx_zpy(void);
extern void sty_abs(void);
extern void sty_zp(void);
extern void sty_zpx(void);
extern void stz_abs(void);
extern void stz_absx(void);
extern void stz_zp(void);
extern void stz_zpx(void);
extern void sxy(void);
extern void tai(void);
extern void tam(void);
extern void tax(void);
extern void tay(void);
extern void tdd(void);
extern void tia(void);
extern void tii(void);
extern void tin(void);
extern void tma(void);
extern void trb_abs(void);
extern void trb_zp(void);
extern void tsb_abs(void);
extern void tsb_zp(void);
extern void tstins_abs(void);
extern void tstins_absx(void);
extern void tstins_zp(void);
extern void tstins_zpx(void);
extern void tsx(void);
extern void txa(void);
extern void txs(void);
extern void tya(void);

#define INT_NONE        0            /* No interrupt required      */
#define INT_IRQ         1            /* Standard IRQ interrupt     */
#define INT_NMI         2            /* Non-maskable interrupt     */
#define INT_QUIT        3            /* Exit the emulation         */
#define	INT_TIMER       4
#define	INT_IRQ2        8

#define	VEC_RESET	0xFFFE
#define	VEC_NMI		0xFFFC
#define	VEC_TIMER	0xFFFA
#define	VEC_IRQ		0xFFF8
#define	VEC_IRQ2	0xFFF6
#define	VEC_BRK		0xFFF6

extern UChar flnz_list[256];

inline UChar imm_operand(UInt16 addr);
inline UChar get_8bit_zp(UChar zp_addr);
inline UInt16 get_16bit_zp(UChar zp_addr);
inline void put_8bit_zp(UChar zp_addr, UChar byte);

#if !defined(INLINED_ACCESSORS)
#define get_8bit_addr(addr) Rd6502((addr))
#define put_8bit_addr(addr,byte) Wr6502((addr),(byte))
#define get_16bit_addr(addr) (Rd6502(addr) + (Rd6502(addr + 1) << 8))
#else
inline UChar get_8bit_addr(UInt16 addr);
inline void put_8bit_addr(UInt16 addr, UChar byte);
inline UInt16 get_16bit_addr(UInt16 addr);
#endif

#endif
